//问题描述：
//有12枚硬币。其中有11枚真币和一枚假币。
//假币和真币重量不同，但不知道假币比真币轻还是重。
//现在，用一架天平称了这些币三次，告诉你称的结果，请你找出假币并且确定假币是轻是重。

//输入样例：
//1
//ABCD  EFGH     even  ----  表示的右侧天平的状态
//ABCI    EFJK      up
//ABIJ     EFGH    even

//输出样例：
//K is the counterfeit coin and it is light.

#include<iostream>
#include<cstring>
using namespace std;
char leftCoins[3][6];  //天平左侧硬币
char rightCoins[3][6];  //天平右侧硬币
char result[3][6];  //天平右侧状态
bool isFake(char c, bool light)  //判断假币轻重是否符合条件，符合返回true，输出该次实验结果；不符合返回false，继续枚举
{
	char *pleft, *pright;  //指向天平两侧的字符串
	for(int i=0;i<=3;i++){
		if(light){
			pleft = leftCoins[i];
			pright = rightCoins[i];
		}
		else{  //如果假设假币是重的，则两边称量结果互换
			pleft = rightCoins[i];
			pright = leftCoins[i];
		}
		switch (result[i][0]) {
		case 'u':
			if(strchr(pright, c) == NULL)
				return false;
			break;
		case 'e':
			if(strchr(pleft, c) || strchr(pright, c))
				return false;
			break;
		case 'd':
			if(strchr(pleft, c) == NULL)
				return false;
			break;
		}
	}
	return true;
}
int main()
{
	int n = 0;
	cin >> n;  //n次实验
	while(n--){
		for(int i = 0; i < 3; i++){  //每次实验有 3 次称量
			cin >> leftCoins[i] >> rightCoins[i] >> result[i];
		}
			for(char c = 'A'; c <= 'L'; c++){  //12枚硬币，A到L枚举
				//isFake返回值为true时，找到假币且判断出轻重
				if(isFake(c, true)){
					//true表示假币为轻，
					cout << c << " is the counterfeit coin and it is light." << endl;
					break;
				}
				else if(isFake(c, false)){
					//false表示假币为重
					cout << c << " is the counterfeit coin and it is heavy." << endl;
					break;
				}
			}
	}
	return 0;
}


//#include<iostream>
//#include<cstring>
//using namespace std;
//char leftCoins[3][7];  //左侧天平硬币
//char rightCoins[3][7];  //右侧天平硬币
//char result[3][7];  //右侧天平状态
//
//bool isFake(char c, bool light)
//{
//	for(int i = 0; i < 3; i++){
//		char *pleft;  //指向天平两侧的字符串
//		char *pright;
//		if(light){
//			pleft = leftCoins[i];
//			pright = rightCoins[i];
//		}
//		else{  //如果假设假币是重的，则两边称量结果互换
//			pleft = rightCoins[i];
//			pright = leftCoins[i];
//		}
//		//pright指向 
//		switch(result[i][0]){  //天平右侧情况
//		case 'u':  //右边轻，则轻的假币在右侧
//			if(strchr(pright, c) == NULL)  //未查找到假币，假设不符合
//				return false;  //假设c为轻的，错误
//			break;
//		case 'e':  //平衡，假币不在任何一侧
//			if(strchr(pleft, c) || strchr(pright, c))
//				return false;
//			break;
//		case 'd':  //右边重，假币在左侧
//			if(strchr(pleft, c) == NULL)
//				return false;
//			break;
//		}
//	}
//	return true;
//}
//int main()
//{
//	int n = 0;
//	cin >> n; //n组数据
//	while(n--){
//		for(int i = 0; i < 3; i++){  //一组数据称三次
//			cin >> leftCoins[i] >> rightCoins[i] >>result[i];
//		}
//		for(char c = 'A'; c <= 'L'; c++){  //12枚硬币，A到L
//			if(isFake(c, true)){  //假设c为轻的假币
//				cout << c << " is the counterfeit coin and it is light." << endl;
//				break;
//			}
//			else if(isFake(c, false)){  //假设c为重的假币
//				cout << c << " is the counterfeit coin and it is heavy." << endl;
//				break;
//			}
//		}
//	}
//	return 0;
//}
